草庐IT

Java Swingworker 和多线程

全部标签

c++ - OpenMP:并行运行两个函数,每个函数占线程池的一半

我有一个CPU消耗函数do_long,我需要在两个不同的数据集上运行。do_long(data1);do_long(data2);do_long(){#pragmaompforfor(...){//doproccessing}}我有N个线程可用(取决于机器)。如何告诉OpenMP我想要do_long函数并行运行,N/2个线程应该在第一个do_long中执行循环,另一个N/2应该处理第二个do_long? 最佳答案 一种方法是使用嵌套并行来实现:voiddo_long(intthreads){#pragmaompparallelfor

c++ - 如何停止正在阻塞的 win32 线程?

我创建了一个自定义的ThreadPool,它使用_beginthreadex()启动许多win32线程。线程正在运行一个简单的循环,试图从阻塞队列中取出任务,但有时我需要停止线程,如果它们在Dequeue上被阻塞,那么我不知道如何获取线程脱离阻塞状态。voidThreadPool::Loop(){while(_running){try{//Attemptstodequeueataskandrunit_taskQueue.Dequeue()->Run();}catch(BlockingQueueTerminate&){//Eattheexceptionandchecktherunning

c++ - 如果两个线程同时访问同一个 bool 变量会发生什么?

我有一个跨平台的C++程序,我在其中使用boost库创建一个异步计时器。我有一个全局变量:boolreceivedInput=false;一个线程等待并处理输入stringargStr;while(1){getline(cin,argStr);processArguments(argStr);receivedInput=true;}另一个线程运行一个计时器,每10秒调用一次回调。在该回调中,我检查是否收到消息if(receivedInput){//setuptimertofireagainin10secondsreceivedInput=false;}elseexit(1);这样安全吗

c++ - 在同一硬件单元上创建多个线程

我的游戏使用多线程架构,线程布局如下:Main:负责高层架构资源:负责异步文件I/O网络:负责阻塞网络I/OWorkers:做CPU密集型工作现在,有(hardware_threads-3)个工作线程,一个用于每个未使用的硬件单元,但我想通过将“资源”和“网络”线程组合到一个单元中来添加一个,因为这两个线程都是会花很多时间闲置。在C++中使用boost::thread这可能吗?这是否值得优化? 最佳答案 你是对的,因为这是个坏主意。为一项工作设计一个线程听起来很简单,但实际上并非如此-特别是当某些工作比其他工作更重时。另外,你做的线

C++11 静态局部变量和线程

对于创建/使用std::thread的类,静态局部变量是否安全?因为当我使用这样的东西时:logger&logger::get_instance(void){staticloggerlg;returnlg;}并尝试退出(强制关闭)可执行文件,它崩溃/不正确退出(VisualStudio2012调试器甚至崩溃)。当我不这样做时,程序会在我强制关闭时正常退出。这是崩溃时的堆栈调用ntdll.dll!77c10dbd()Unknown[Framesbelowmaybeincorrectand/ormissing,nosymbolsloadedforntdll.dll]ntdll.dll!77

c++ - 使用多线程时程序变慢

我有一个执行一些蒙特卡罗算法的简单程序。该算法的一次迭代没有副作用,因此我应该能够使用多个线程运行它。所以这是mywholeprogram的相关部分,这是用C++11编写的:voidtask(unsignedintmax_iter,std::vector*results,std::vector::iteratoriterator){for(unsignedintn=0;nthreads(thread_count);std::vectorresults(max_iter);std::cout::iteratorstart=results.begin()+max_iter/thread_c

c++ - 跨多个线程设置表项

我正在尝试使用单独的工作线程更新表中的值,使用POSIX线程。工作线程正在执行的函数正在尝试执行以下操作:ui->table->setItem(0,0,newQTableWidgetItem(tr("%1").arg(value)));但是,在运行时出现以下错误:QObject::connect:Cannotqueueargumentsoftype'QVector'(Makesure'QVector'isregisteredusingqRegisterMetaType().)我不太确定qRegisterMetaType是如何工作的。我想知道是否有人知道如何授予工作线程直接访问小部件的权

c++ - 使用 QtConcurrent 在 QT 中实现多线程

我正在用Qt开发一个应用程序,它有时会处理一堆视频。它工作正常,但在处理阶段它只有40-60%的CPU使用率,所以我试图让它成为多线程。我使用QtConcurrent因为他的“高级别”而不是更传统的线程管理,我的代码很简单:for(inti=0;ifutureToken=QtConcurrent::run(this,process,listOfVideos.takeFirst());QFutureWatcher*fw=newQFutureWatcher();connect(fw,SIGNAL(finished()),this,SLOT(manageResult));fw->setFut

c++ - 使用 QT5_ADD_RESOURCES 和使用 CMake 进行多线程编译时损坏的资源 .cpp 文件

Qt5.0版本带来了一组更简单的命令来使用CMake构建Qt项目。参见http://qt-project.org/doc/qt-5/cmake-manual.html.需要使用命令QT5_ADD_RESOURCES包含项目的资源。如果我的资源文件名为Icon32.qrc,QT5_ADD_RESOURCES(RESOURCESIcon32.qrc)命令会自动将其转换为qrc_Icon32.cpp文件并定义一个${RESOURCES}变量,然后我可以将其包含到适当的目标中。这样做很完美,除了我在CDash中大约每20个构建出现一次编译错误。错误通常采用以下形式:/.../CMake/bui

c++ - 成员函数线程安全吗?

我在服务器对象中有多个线程正在执行相同的任务。这些线程是使用Server::*例程初始化的。在这个例程中有一个带有一些处理的无限循环。我想知道对多个线程使用相同的方法是否是线程安全的?难怪对于类的字段,如果我想读取或写入它,我将使用互斥体。但是例程本身呢?既然一个函数是一个地址,那些线程将在同一个内存区域中运行?我是否需要为每个线程创建一个具有相同代码的方法?Ps:我用的是std::mutex(&Server::Task,this) 最佳答案 两个线程同时运行同一个函数(不管是不是成员函数)是没有问题的。就指令而言,这类似于让两个线